package com.webtest.jsptest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * @author lzy
 * @version v1.0
 * Create DateTime: 2018/7/24 9:05
 *
 * GenericServlet:
 * 1) 是一个Servlet，是Servelt接口和ServletConfig接口的实现类，但是一个抽象类，其中service方法为抽象方法
 * 2）如果新建的Servlet程序直接继承GenericServlet会使开发更简洁
 * 3) 具体实现
 * a.在GenericServlet中声明了一个ServletConfig类型的成员变量，在init(ServletConfig)方法中对其进行了初始化
 * b.利用servletConfig成员变量的方法实现了ServletConfig接口的方法
 * c.还定义了一个init()方法，在init（ServletConfig）方法中对其进行调用，子类可以直接覆盖init()在其中实现对Servlet的初始化
 * d.不建议直接覆盖init(ServletConfig)，因为如果忘记编写super（ServletConfig），而还是用了ServletConfig接口的方法，则会出现空指针异常
 * e.新建的init()并非Servlet的生命周期方法，而init（ServletConfig）是生命周期相关的方法
 *
 */
public class LoginServletGeneric extends GenericServlet {
    private static final Logger LOGGER = LoggerFactory.getLogger(LoginServletGeneric.class
    );
    private static final long serialVersionUID = 4714531452961478354L;

    // 初始化本servlet的相关资源
    @Override
    public void init() throws ServletException {
        LOGGER.info("LoginServletGeneric 的初始化方法");
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        // 先将ServletRequest转换为子接口HttpServletRequest
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        String requestURI = request.getRequestURI();
        LOGGER.info(requestURI);

        String requestUrl = request.getRequestURL().toString();
        LOGGER.info("url:" + requestUrl);

        String method = request.getMethod();
        LOGGER.info("method:" + method);

        /*********** servletResponse ***********/
        // getWriter() 返回Printwriter对象，调用该对象的print()方法，将内容直接输入到response的body中，显示在客户端的浏览器中
        String user = servletRequest.getParameter("user");
        PrintWriter out = servletResponse.getWriter();
        out.println("<h1>");
        if (user == null) {
            out.println("Response from server");
        } else {
            out.println("Hello " + user);
        }
        out.println("</h1>");
    }
}
